/* global  expect, describe, it, apiTest */

const Role = require('./fn')
const Admin = require('../admin/fn')

describe('角色 - 列表', function() {
  it('列表 - 正常', function() {
    return Role.checkList()
  })
})

describe('角色 - 集成测试', function() {
  it('新增>删除', function() {
    // 增
    return Role.addOne(Role.randOne(), (data) => {
      // 删
      return Role.removeOne(data._id)
    })
  })
  it('新增>修改>查询>删除', function() {
    // 增
    return Role.addOne(Role.randOne(), (data) => {
      // 改查
      return Role.editOne(data._id, Role.randOne(), () => {
        // 删
        return Role.removeOne(data._id)
      })
    })
  })

  it('新增>添加管理员>登录>查询管理员数量>删除角色>登录(仅首页权限)>删除管理员', function() {
    // 增
    return Role.addOne(Role.randOne(), (role) => {
      // 添加管理员
      var post = Admin.randOne()
      post.role = role._id
      return Admin.addOne(post, (data) => {
        // 登录
        return Admin.login({ username: data.username, password: post.password }, (rs) => {
          expect(rs.role.powers).to.deep.equal(role.powers)
          // 查询管理员数量
          return Admin.count({ role: role._id }, (count) => {
            expect(count.total).to.equal(1)
            // 删除角色
            return Role.removeOne(role._id, () => {
              // 登录(仅首页权限)
              return Admin.login({ username: data.username, password: post.password }, (rs) => {
                expect(rs.role.powers).to.deep.equal(['index'])
                return Admin.removeOne(data._id)
              })
            })
          })
        })
      })
    })
  })
})

describe('角色 - 异常用例', function() {
  it('详情 - 异常| 无参数', function() {
    return apiTest.get('/role/findOne', {})
      .then(function(res) {
        var error = apiTest.apiErr(res, 31000)
        expect(error.param).to.equal('_id')
      })
  })

  it('详情 - 异常| 数据不存在', function() {
    return apiTest.get('/role/findOne', { _id: '500000000000000000000000' })
      .then(function(res) {
        apiTest.apiErr(res, 32000)
      })
  })

  it('添加 - 异常| 必填项: 角色名称', function() {
    return apiTest.post('/role/create', {}).then(function(res) {
      var error = apiTest.apiErr(res, 31000)
      expect(error.param).to.equal('name')
    })
  })

  it('添加 - 异常| 必填项: 权限', function() {
    var post = Role.randOne()
    delete post.powers
    return apiTest.post('/role/create', post).then(function(res) {
      var error = apiTest.apiErr(res, 31000)
      expect(error.param).to.equal('powers')
    })
  })

  it('删除 - 异常| 不存在', function() {
    return apiTest.post('/role/remove', { _id: '500000000000000000000000' }).then(function(res) {
      apiTest.apiErr(res, 32000)
    })
  })
})
